#include <iostream>
#include <string>

using namespace std;

/*
**自动类型推导**：必须推导出一致的数据类型 T 才能使用，即自动推导不会产生隐式类型转换。
void Swap(T & val_1 , T & val_2)
*/

template <typename T>
void Swap(T & val_1 , T & val_2)
{
    T temp = val_1;
    val_1 = val_2;
    val_2 = temp;
}


int main(int argc, char const *argv[])
{
    //  **自动类型推导**：必须推导出一致的数据类型 T 才能使用，即自动推导不会产生隐式类型转换。
#if 0
    double val_1;
    int val_2;
    Swap(val_1 , val_2);
#endif
    // **显式类型指定**：只有通过显式指定类型的方式，才能发生隐式类型转换，==但是如果参数列表内是引用，则不行(不一定)==。
#if 0
    double val_1;
    int val_2;
    Swap<int>(val_1 , val_2);
#endif

    return 0;
}
